<?php
namespace app\dao\goods;

use app\model\Goods;

class GoodsQueryDao
{
    private $query;

    public function __construct()
    {
        $this->query = new Goods();
    }

    /**
     * 获取列表
     * @param int $page -
     * @param int $limit -
     * @return array -
     */
    public function getList(int $page = 1, int $limit = 10)
    {
        return $this->query->page($page, $limit)->select();
    }

    /**
     * 获取所有数据
     * @return array -
     */
    public function getAll()
    {
        return $this->query->select();
    }

    /**
     * 获取当前筛选下的总记录数
     * @return int -
     */
    public function getCount()
    {
        return $this->query->count();
    }

    /**
     * 根据货品名模糊搜索
     * @param string $name -
     * @return GoodsQueryDao
     */
    public function fuzzyByName(string $name)
    {
        if (!empty($name))
        {
            $this->query->where('name', 'like', sprintf('%%%s%%', $name));
        }

        return $this;
    }

    /**
     * 根据编号模糊搜索
     * @param string $number -
     * @return GoodsQueryDao
     */
    public function fuzzyByNumber(string $number)
    {
        if (!empty($number))
        {
            $this->query->where('number', 'like', sprintf('%%%s%%', $number));
        }

        return $this;
    }

    /**
     * 根据标签搜索
     * @param array $tags -
     * @return GoodsQueryDao
     */
    public function filterByTags(array $tags)
    {
        if (!empty($tags))
        {
            // TODO
        }

        return $this;
    }

    /**
     * 根据发布时间搜索
     * @param int $time -
     * @return GoodsQueryDao
     */
    public function filterByStartCreateTime(int $time)
    {
        if (!empty($time))
        {
            // TODO
        }

        return $this;
    }

    /**
     * 根据发布时间搜索
     * @param int $time -
     * @return GoodsQueryDao
     */
    public function filterByEndCreateTime(int $time)
    {
        if (!empty($time))
        {
            // TODO
        }

        return $this;
    }

    /**
     * 根据上架状态搜索
     * @param int $status -
     * @return GoodsQueryDao
     */
    public function filterByStatus(int $status)
    {
        if (!empty($status))
        {
            // TODO
        }

        return $this;
    }

    /**
     * 根据id排序
     * @param string $order -
     * @return GoodsQueryDao
     */
    public function orderById(string $order)
    {
        if (in_array($order, ['asc', 'desc']))
        {
            $this->query->order('id', $order);
        }

        return $this;
    }
}
